package cn.tedu.csmall.stock.webapi.quartz.rabbit;

import cn.tedu.csmall.commons.pojo.stock.entity.Stock;
import cn.tedu.csmall.stock.webapi.quartz.config.RabbitMQConfig;
import cn.tedu.csmall.stock.webapi.utils.RedisBloomUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.math.RandomUtils;
import org.checkerframework.checker.units.qual.C;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;

@Slf4j
public class RabbitMQJob implements Job {

    // 装配能够向RabbitMQ发送消息的对象
    // 这个对象也是在添加依赖后,SpringBoot启动时自动向容器中保存的
//    @Autowired
//    private RabbitTemplate rabbitTemplate;

    // 装配操作布隆过滤器的对象
    @Autowired
    private RedisBloomUtils redisBloomUtils;

    static int i=1;
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {

        // 定义一个数组,用于保存到布隆过滤器中
        String[] colors={"red","orange","yellow","blue","black","white","pink"};
        // 定义布隆过滤器的key常量
        final String COLOR_BLOOM="color_bloom";
        // redisBloomUtils可以指定元素数和误判率的
        // 默认情况下100 个元素会有1%的误判率
        // 下面设置就能实现key为COLOR_BLOOM常量的布隆过滤器在10000个元素时,保证误判率1‰
        // redisBloomUtils.bfreserve(COLOR_BLOOM,0.001,10000);
        // 下面将colors数组中的元素,保存在布隆过滤器中
        redisBloomUtils.bfmadd(COLOR_BLOOM,colors);
        // 下面判断指定的字符串是否在集合中
        String el="green";
        // 输出是否在布隆过滤器中
        log.info(el+"是否在colors数组中:{}"
                        ,redisBloomUtils.bfexists(COLOR_BLOOM,el));

        // 实例化Stock对象
        /*Stock stock=new Stock();
        stock.setId(i++);
        stock.setCommodityCode("PC100");
        stock.setReduceCount(1+ RandomUtils.nextInt(20));
        // 下面开始发送消息到RabbitMQ
        rabbitTemplate.convertAndSend(
                RabbitMQConfig.STOCK_EX,
                RabbitMQConfig.STOCK_ROUT,
                stock);
        log.info("消息发送完成:{}",stock);*/
    }
}
